Code coverage report for src/view-factory.js

Statements: 21.43% (24 / 112)      Branches: 0% (0 / 38)      Functions: 42.86% (9 / 21)      Lines: 21.82% (24 / 110)      Ignored: none     

All files » src/ » view-factory.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 2261     1   1   1                                                                         1                                                 1                                         1                                                                                           1   1   1   2   1   1     1 1                 1                 1     1   1         1 1               1                                                             1     1        
System.register(['aurelia-dependency-injection', './view', './view-slot', './content-selector', './resource-registry'], function (_export) {
  'use strict';
 
  var Container, View, ViewSlot, ContentSelector, ViewResources, BoundViewFactory, defaultFactoryOptions, ViewFactory;
 
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  function elementContainerGet(key) {
    if (key === Element) {
      return this.element;
    }
 
    if (key === BoundViewFactory) {
      if (this.boundViewFactory) {
        return this.boundViewFactory;
      }
 
      var factory = this.instruction.viewFactory,
          partReplacements = this.partReplacements;
 
      if (partReplacements) {
        factory = partReplacements[factory.part] || factory;
      }
 
      factory.partReplacements = partReplacements;
      return this.boundViewFactory = new BoundViewFactory(this, factory, this.executionContext);
    }
 
    if (key === ViewSlot) {
      if (this.viewSlot === undefined) {
        this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer, this.executionContext);
        this.children.push(this.viewSlot);
      }
 
      return this.viewSlot;
    }
 
    if (key === ViewResources) {
      return this.viewResources;
    }
 
    return this.superGet(key);
  }
 
  function createElementContainer(parent, element, instruction, executionContext, children, partReplacements, resources) {
    var container = parent.createChild(),
        providers,
        i;
 
    container.element = element;
    container.instruction = instruction;
    container.executionContext = executionContext;
    container.children = children;
    container.viewResources = resources;
    container.partReplacements = partReplacements;
 
    providers = instruction.providers;
    i = providers.length;
 
    while (i--) {
      container.registerSingleton(providers[i]);
    }
 
    container.superGet = container.get;
    container.get = elementContainerGet;
 
    return container;
  }
 
  function makeElementIntoAnchor(element, isCustomElement) {
    var anchor = document.createComment('anchor');
 
    if (isCustomElement) {
      anchor.attributes = element.attributes;
      anchor.hasAttribute = function (name) {
        return element.hasAttribute(name);
      };
      anchor.getAttribute = function (name) {
        return element.getAttribute(name);
      };
      anchor.setAttribute = function (name, value) {
        element.setAttribute(name, value);
      };
    }
 
    element.parentNode.replaceChild(anchor, element);
 
    return anchor;
  }
 
  function applyInstructions(containers, executionContext, element, instruction, behaviors, bindings, children, contentSelectors, partReplacements, resources) {
    var behaviorInstructions = instruction.behaviorInstructions,
        expressions = instruction.expressions,
        elementContainer,
        i,
        ii,
        current,
        instance;
 
    if (instruction.contentExpression) {
      bindings.push(instruction.contentExpression.createBinding(element.nextSibling));
      element.parentNode.removeChild(element);
      return;
    }
 
    if (instruction.contentSelector) {
      var commentAnchor = document.createComment('anchor');
      element.parentNode.replaceChild(commentAnchor, element);
      contentSelectors.push(new ContentSelector(commentAnchor, instruction.selector));
      return;
    }
 
    if (behaviorInstructions.length) {
      if (!instruction.anchorIsContainer) {
        element = makeElementIntoAnchor(element, instruction.isCustomElement);
      }
 
      containers[instruction.injectorId] = elementContainer = createElementContainer(containers[instruction.parentInjectorId], element, instruction, executionContext, children, partReplacements, resources);
 
      for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {
        current = behaviorInstructions[i];
        instance = current.type.create(elementContainer, current, element, bindings, current.partReplacements);
 
        if (instance.contentView) {
          children.push(instance.contentView);
        }
 
        behaviors.push(instance);
      }
    }
 
    for (i = 0, ii = expressions.length; i < ii; ++i) {
      bindings.push(expressions[i].createBinding(element));
    }
  }
 
  return {
    setters: [function (_aureliaDependencyInjection) {
      Container = _aureliaDependencyInjection.Container;
    }, function (_view) {
      View = _view.View;
    }, function (_viewSlot) {
      ViewSlot = _viewSlot.ViewSlot;
    }, function (_contentSelector) {
      ContentSelector = _contentSelector.ContentSelector;
    }, function (_resourceRegistry) {
      ViewResources = _resourceRegistry.ViewResources;
    }],
    execute: function () {
      BoundViewFactory = (function () {
        function BoundViewFactory(parentContainer, viewFactory, executionContext) {
          _classCallCheck(this, BoundViewFactory);
 
          this.parentContainer = parentContainer;
          this.viewFactory = viewFactory;
          this.executionContext = executionContext;
          this.factoryOptions = { behaviorInstance: false };
        }
 
        BoundViewFactory.prototype.create = function create(executionContext) {
          var childContainer = this.parentContainer.createChild(),
              context = executionContext || this.executionContext;
 
          this.factoryOptions.systemControlled = !executionContext;
 
          return this.viewFactory.create(childContainer, context, this.factoryOptions);
        };
 
        return BoundViewFactory;
      })();
 
      _export('BoundViewFactory', BoundViewFactory);
 
      defaultFactoryOptions = {
        systemControlled: false,
        suppressBind: false
      };
 
      ViewFactory = (function () {
        function ViewFactory(template, instructions, resources) {
          _classCallCheck(this, ViewFactory);
 
          this.template = template;
          this.instructions = instructions;
          this.resources = resources;
        }
 
        ViewFactory.prototype.create = function create(container, executionContext) {
          var options = arguments[2] === undefined ? defaultFactoryOptions : arguments[2];
 
          var fragment = this.template.cloneNode(true),
              instructables = fragment.querySelectorAll('.au-target'),
              instructions = this.instructions,
              resources = this.resources,
              behaviors = [],
              bindings = [],
              children = [],
              contentSelectors = [],
              containers = { root: container },
              partReplacements = options.partReplacements || this.partReplacements,
              i,
              ii,
              view;
 
          for (i = 0, ii = instructables.length; i < ii; ++i) {
            applyInstructions(containers, executionContext, instructables[i], instructions[i], behaviors, bindings, children, contentSelectors, partReplacements, resources);
          }
 
          view = new View(fragment, behaviors, bindings, children, options.systemControlled, contentSelectors);
          view.created(executionContext);
 
          if (!options.suppressBind) {
            view.bind(executionContext);
          }
 
          return view;
        };
 
        return ViewFactory;
      })();
 
      _export('ViewFactory', ViewFactory);
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL3ZpZXctZmFjdG9yeS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7aUVBdUlhLGdCQUFnQixFQWtCekIscUJBQXFCLEVBS1osV0FBVzs7OztBQXhKeEIsV0FBUyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUM7QUFDL0IsUUFBRyxHQUFHLEtBQUssT0FBTyxFQUFDO0FBQ2pCLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztLQUNyQjs7QUFFRCxRQUFHLEdBQUcsS0FBSyxnQkFBZ0IsRUFBQztBQUMxQixVQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBQztBQUN2QixlQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztPQUM5Qjs7QUFFRCxVQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVc7VUFDdEMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxVQUFHLGdCQUFnQixFQUFDO0FBQ2xCLGVBQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDO09BQ3JEOztBQUVELGFBQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1QyxhQUFPLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDM0Y7O0FBRUQsUUFBRyxHQUFHLEtBQUssUUFBUSxFQUFDO0FBQ2xCLFVBQUcsSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUM7QUFDN0IsWUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDdEcsWUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ25DOztBQUVELGFBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztLQUN0Qjs7QUFFRCxRQUFHLEdBQUcsS0FBSyxhQUFhLEVBQUM7QUFDdkIsYUFBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0tBQzNCOztBQUVELFdBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxXQUFTLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUM7QUFDcEgsUUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUNwQixTQUFTO1FBQ1QsQ0FBQyxDQUFDOztBQUVsQixhQUFTLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUM1QixhQUFTLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNwQyxhQUFTLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDOUMsYUFBUyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUIsYUFBUyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDcEMsYUFBUyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDOztBQUU5QyxhQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUNsQyxLQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQzs7QUFFckIsV0FBTSxDQUFDLEVBQUUsRUFBRTtBQUNULGVBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzQzs7QUFFRCxhQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7QUFDbkMsYUFBUyxDQUFDLEdBQUcsR0FBRyxtQkFBbUIsQ0FBQzs7QUFFcEMsV0FBTyxTQUFTLENBQUM7R0FDbEI7O0FBRUQsV0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFDO0FBQ3RELFFBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7O0FBRTlDLFFBQUcsZUFBZSxFQUFDO0FBQ2pCLFlBQU0sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUN2QyxZQUFNLENBQUMsWUFBWSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQUUsZUFBTyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUUsQ0FBQztBQUM1RSxZQUFNLENBQUMsWUFBWSxHQUFHLFVBQVMsSUFBSSxFQUFDO0FBQUUsZUFBTyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUUsQ0FBQztBQUMzRSxZQUFNLENBQUMsWUFBWSxHQUFHLFVBQVMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUFFLGVBQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQUUsQ0FBQztLQUNwRjs7QUFFRCxXQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWpELFdBQU8sTUFBTSxDQUFDO0dBQ2Y7O0FBRUQsV0FBUyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFDM0UsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFDO0FBQzdFLFFBQUksb0JBQW9CLEdBQUcsV0FBVyxDQUFDLG9CQUFvQjtRQUN2RCxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVc7UUFDckMsZ0JBQWdCO1FBQUUsQ0FBQztRQUFFLEVBQUU7UUFBRSxPQUFPO1FBQUUsUUFBUSxDQUFDOztBQUUvQyxRQUFHLFdBQVcsQ0FBQyxpQkFBaUIsRUFBQztBQUMvQixjQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDaEYsYUFBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsYUFBTztLQUNSOztBQUVELFFBQUcsV0FBVyxDQUFDLGVBQWUsRUFBQztBQUM3QixVQUFJLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JELGFBQU8sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RCxzQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLGFBQU87S0FDUjs7QUFFRCxRQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBQztBQUM3QixVQUFHLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFDO0FBQ2hDLGVBQU8sR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO09BQ3ZFOztBQUVELGdCQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLGdCQUFnQixHQUNuRCxzQkFBc0IsQ0FDcEIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUN4QyxPQUFPLEVBQ1AsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLFNBQVMsQ0FDUixDQUFDOztBQUVOLFdBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUM7QUFDdkQsZUFBTyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLGdCQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O0FBRXZHLFlBQUcsUUFBUSxDQUFDLFdBQVcsRUFBQztBQUN0QixrQkFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckM7O0FBRUQsaUJBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDMUI7S0FDRjs7QUFFRCxTQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUM5QyxjQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUN0RDtHQUNGOzs7OzhDQXJJTyxTQUFTOzttQkFDVCxJQUFJOzsyQkFDSixRQUFROzt5Q0FDUixlQUFlOzt3Q0FDZixhQUFhOzs7QUFtSVIsc0JBQWdCO0FBQ2hCLGlCQURBLGdCQUFnQixDQUNmLGVBQWUsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUM7Z0NBRGhELGdCQUFnQjs7QUFFekIsY0FBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDdkMsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDL0IsY0FBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQ3pDLGNBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxnQkFBZ0IsRUFBQyxLQUFLLEVBQUUsQ0FBQztTQUNsRDs7QUFOVSx3QkFBZ0IsV0FRM0IsTUFBTSxHQUFBLGdCQUFDLGdCQUFnQixFQUFDO0FBQ3RCLGNBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFO2NBQ25ELE9BQU8sR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7O0FBRXhELGNBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQzs7QUFFekQsaUJBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDOUU7O2VBZlUsZ0JBQWdCOzs7a0NBQWhCLGdCQUFnQjs7QUFrQnpCLDJCQUFxQixHQUFHO0FBQzFCLHdCQUFnQixFQUFDLEtBQUs7QUFDdEIsb0JBQVksRUFBQyxLQUFLO09BQ25COztBQUVZLGlCQUFXO0FBQ1gsaUJBREEsV0FBVyxDQUNWLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFDO2dDQURuQyxXQUFXOztBQUVwQixjQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixjQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNqQyxjQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztTQUM1Qjs7QUFMVSxtQkFBVyxXQU90QixNQUFNLEdBQUEsZ0JBQUMsU0FBUyxFQUFFLGdCQUFnQixFQUFnQztjQUE5QixPQUFPLGdDQUFDLHFCQUFxQjs7QUFDL0QsY0FBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO2NBQ3hDLGFBQWEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2NBQ3ZELFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWTtjQUNoQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7Y0FDMUIsU0FBUyxHQUFHLEVBQUU7Y0FDZCxRQUFRLEdBQUcsRUFBRTtjQUNiLFFBQVEsR0FBRyxFQUFFO2NBQ2IsZ0JBQWdCLEdBQUcsRUFBRTtjQUNyQixVQUFVLEdBQUcsRUFBRSxJQUFJLEVBQUMsU0FBUyxFQUFFO2NBQy9CLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO2NBQ3BFLENBQUM7Y0FBRSxFQUFFO2NBQUUsSUFBSSxDQUFDOztBQUVoQixlQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBQztBQUNoRCw2QkFBaUIsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUM5RCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7V0FDbEc7O0FBRUQsY0FBSSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNyRyxjQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7O0FBRS9CLGNBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFDO0FBQ3ZCLGdCQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7V0FDN0I7O0FBRUQsaUJBQU8sSUFBSSxDQUFDO1NBQ2I7O2VBakNVLFdBQVc7Ozs2QkFBWCxXQUFXIiwiZmlsZSI6Ii9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL3RlbXBsYXRpbmcvc3JjL3ZpZXctZmFjdG9yeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29udGFpbmVyfSBmcm9tICdhdXJlbGlhLWRlcGVuZGVuY3ktaW5qZWN0aW9uJztcbmltcG9ydCB7Vmlld30gZnJvbSAnLi92aWV3JztcbmltcG9ydCB7Vmlld1Nsb3R9IGZyb20gJy4vdmlldy1zbG90JztcbmltcG9ydCB7Q29udGVudFNlbGVjdG9yfSBmcm9tICcuL2NvbnRlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHtWaWV3UmVzb3VyY2VzfSBmcm9tICcuL3Jlc291cmNlLXJlZ2lzdHJ5JztcblxuZnVuY3Rpb24gZWxlbWVudENvbnRhaW5lckdldChrZXkpe1xuICBpZihrZXkgPT09IEVsZW1lbnQpe1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnQ7XG4gIH1cblxuICBpZihrZXkgPT09IEJvdW5kVmlld0ZhY3Rvcnkpe1xuICAgIGlmKHRoaXMuYm91bmRWaWV3RmFjdG9yeSl7XG4gICAgICByZXR1cm4gdGhpcy5ib3VuZFZpZXdGYWN0b3J5O1xuICAgIH1cblxuICAgIHZhciBmYWN0b3J5ID0gdGhpcy5pbnN0cnVjdGlvbi52aWV3RmFjdG9yeSxcbiAgICAgICAgcGFydFJlcGxhY2VtZW50cyA9IHRoaXMucGFydFJlcGxhY2VtZW50cztcblxuICAgIGlmKHBhcnRSZXBsYWNlbWVudHMpe1xuICAgICAgZmFjdG9yeSA9IHBhcnRSZXBsYWNlbWVudHNbZmFjdG9yeS5wYXJ0XSB8fCBmYWN0b3J5O1xuICAgIH1cblxuICAgIGZhY3RvcnkucGFydFJlcGxhY2VtZW50cyA9IHBhcnRSZXBsYWNlbWVudHM7XG4gICAgcmV0dXJuIHRoaXMuYm91bmRWaWV3RmFjdG9yeSA9IG5ldyBCb3VuZFZpZXdGYWN0b3J5KHRoaXMsIGZhY3RvcnksIHRoaXMuZXhlY3V0aW9uQ29udGV4dCk7XG4gIH1cblxuICBpZihrZXkgPT09IFZpZXdTbG90KXtcbiAgICBpZih0aGlzLnZpZXdTbG90ID09PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy52aWV3U2xvdCA9IG5ldyBWaWV3U2xvdCh0aGlzLmVsZW1lbnQsIHRoaXMuaW5zdHJ1Y3Rpb24uYW5jaG9ySXNDb250YWluZXIsIHRoaXMuZXhlY3V0aW9uQ29udGV4dCk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2godGhpcy52aWV3U2xvdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmlld1Nsb3Q7XG4gIH1cblxuICBpZihrZXkgPT09IFZpZXdSZXNvdXJjZXMpe1xuICAgIHJldHVybiB0aGlzLnZpZXdSZXNvdXJjZXM7XG4gIH1cblxuICByZXR1cm4gdGhpcy5zdXBlckdldChrZXkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50Q29udGFpbmVyKHBhcmVudCwgZWxlbWVudCwgaW5zdHJ1Y3Rpb24sIGV4ZWN1dGlvbkNvbnRleHQsIGNoaWxkcmVuLCBwYXJ0UmVwbGFjZW1lbnRzLCByZXNvdXJjZXMpe1xuICB2YXIgY29udGFpbmVyID0gcGFyZW50LmNyZWF0ZUNoaWxkKCksXG4gICAgICAgICAgICAgICAgICBwcm92aWRlcnMsXG4gICAgICAgICAgICAgICAgICBpO1xuXG4gIGNvbnRhaW5lci5lbGVtZW50ID0gZWxlbWVudDtcbiAgY29udGFpbmVyLmluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb247XG4gIGNvbnRhaW5lci5leGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgY29udGFpbmVyLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIGNvbnRhaW5lci52aWV3UmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICBjb250YWluZXIucGFydFJlcGxhY2VtZW50cyA9IHBhcnRSZXBsYWNlbWVudHM7XG5cbiAgcHJvdmlkZXJzID0gaW5zdHJ1Y3Rpb24ucHJvdmlkZXJzO1xuICBpID0gcHJvdmlkZXJzLmxlbmd0aDtcblxuICB3aGlsZShpLS0pIHtcbiAgICBjb250YWluZXIucmVnaXN0ZXJTaW5nbGV0b24ocHJvdmlkZXJzW2ldKTtcbiAgfVxuXG4gIGNvbnRhaW5lci5zdXBlckdldCA9IGNvbnRhaW5lci5nZXQ7XG4gIGNvbnRhaW5lci5nZXQgPSBlbGVtZW50Q29udGFpbmVyR2V0O1xuXG4gIHJldHVybiBjb250YWluZXI7XG59XG5cbmZ1bmN0aW9uIG1ha2VFbGVtZW50SW50b0FuY2hvcihlbGVtZW50LCBpc0N1c3RvbUVsZW1lbnQpe1xuICB2YXIgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgnYW5jaG9yJyk7XG5cbiAgaWYoaXNDdXN0b21FbGVtZW50KXtcbiAgICBhbmNob3IuYXR0cmlidXRlcyA9IGVsZW1lbnQuYXR0cmlidXRlcztcbiAgICBhbmNob3IuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkgeyByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUobmFtZSk7IH07XG4gICAgYW5jaG9yLmdldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUpeyByZXR1cm4gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7IH07XG4gICAgYW5jaG9yLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7IGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTsgfTtcbiAgfVxuXG4gIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoYW5jaG9yLCBlbGVtZW50KTtcblxuICByZXR1cm4gYW5jaG9yO1xufVxuXG5mdW5jdGlvbiBhcHBseUluc3RydWN0aW9ucyhjb250YWluZXJzLCBleGVjdXRpb25Db250ZXh0LCBlbGVtZW50LCBpbnN0cnVjdGlvbixcbiAgYmVoYXZpb3JzLCBiaW5kaW5ncywgY2hpbGRyZW4sIGNvbnRlbnRTZWxlY3RvcnMsIHBhcnRSZXBsYWNlbWVudHMsIHJlc291cmNlcyl7XG4gIHZhciBiZWhhdmlvckluc3RydWN0aW9ucyA9IGluc3RydWN0aW9uLmJlaGF2aW9ySW5zdHJ1Y3Rpb25zLFxuICAgICAgZXhwcmVzc2lvbnMgPSBpbnN0cnVjdGlvbi5leHByZXNzaW9ucyxcbiAgICAgIGVsZW1lbnRDb250YWluZXIsIGksIGlpLCBjdXJyZW50LCBpbnN0YW5jZTtcblxuICBpZihpbnN0cnVjdGlvbi5jb250ZW50RXhwcmVzc2lvbil7XG4gICAgYmluZGluZ3MucHVzaChpbnN0cnVjdGlvbi5jb250ZW50RXhwcmVzc2lvbi5jcmVhdGVCaW5kaW5nKGVsZW1lbnQubmV4dFNpYmxpbmcpKTtcbiAgICBlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYoaW5zdHJ1Y3Rpb24uY29udGVudFNlbGVjdG9yKXtcbiAgICB2YXIgY29tbWVudEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJ2FuY2hvcicpO1xuICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoY29tbWVudEFuY2hvciwgZWxlbWVudCk7XG4gICAgY29udGVudFNlbGVjdG9ycy5wdXNoKG5ldyBDb250ZW50U2VsZWN0b3IoY29tbWVudEFuY2hvciwgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZihiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGgpe1xuICAgIGlmKCFpbnN0cnVjdGlvbi5hbmNob3JJc0NvbnRhaW5lcil7XG4gICAgICBlbGVtZW50ID0gbWFrZUVsZW1lbnRJbnRvQW5jaG9yKGVsZW1lbnQsIGluc3RydWN0aW9uLmlzQ3VzdG9tRWxlbWVudCk7XG4gICAgfVxuXG4gICAgY29udGFpbmVyc1tpbnN0cnVjdGlvbi5pbmplY3RvcklkXSA9IGVsZW1lbnRDb250YWluZXIgPVxuICAgICAgY3JlYXRlRWxlbWVudENvbnRhaW5lcihcbiAgICAgICAgY29udGFpbmVyc1tpbnN0cnVjdGlvbi5wYXJlbnRJbmplY3RvcklkXSxcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgaW5zdHJ1Y3Rpb24sXG4gICAgICAgIGV4ZWN1dGlvbkNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBwYXJ0UmVwbGFjZW1lbnRzLFxuICAgICAgICByZXNvdXJjZXNcbiAgICAgICAgKTtcblxuICAgIGZvcihpID0gMCwgaWkgPSBiZWhhdmlvckluc3RydWN0aW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKXtcbiAgICAgIGN1cnJlbnQgPSBiZWhhdmlvckluc3RydWN0aW9uc1tpXTtcbiAgICAgIGluc3RhbmNlID0gY3VycmVudC50eXBlLmNyZWF0ZShlbGVtZW50Q29udGFpbmVyLCBjdXJyZW50LCBlbGVtZW50LCBiaW5kaW5ncywgY3VycmVudC5wYXJ0UmVwbGFjZW1lbnRzKTtcblxuICAgICAgaWYoaW5zdGFuY2UuY29udGVudFZpZXcpe1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGluc3RhbmNlLmNvbnRlbnRWaWV3KTtcbiAgICAgIH1cblxuICAgICAgYmVoYXZpb3JzLnB1c2goaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIGZvcihpID0gMCwgaWkgPSBleHByZXNzaW9ucy5sZW5ndGg7IGkgPCBpaTsgKytpKXtcbiAgICBiaW5kaW5ncy5wdXNoKGV4cHJlc3Npb25zW2ldLmNyZWF0ZUJpbmRpbmcoZWxlbWVudCkpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBCb3VuZFZpZXdGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IocGFyZW50Q29udGFpbmVyLCB2aWV3RmFjdG9yeSwgZXhlY3V0aW9uQ29udGV4dCl7XG4gICAgdGhpcy5wYXJlbnRDb250YWluZXIgPSBwYXJlbnRDb250YWluZXI7XG4gICAgdGhpcy52aWV3RmFjdG9yeSA9IHZpZXdGYWN0b3J5O1xuICAgIHRoaXMuZXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gICAgdGhpcy5mYWN0b3J5T3B0aW9ucyA9IHsgYmVoYXZpb3JJbnN0YW5jZTpmYWxzZSB9O1xuICB9XG5cbiAgY3JlYXRlKGV4ZWN1dGlvbkNvbnRleHQpe1xuICAgIHZhciBjaGlsZENvbnRhaW5lciA9IHRoaXMucGFyZW50Q29udGFpbmVyLmNyZWF0ZUNoaWxkKCksXG4gICAgICAgIGNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0IHx8IHRoaXMuZXhlY3V0aW9uQ29udGV4dDtcblxuICAgIHRoaXMuZmFjdG9yeU9wdGlvbnMuc3lzdGVtQ29udHJvbGxlZCA9ICFleGVjdXRpb25Db250ZXh0O1xuXG4gICAgcmV0dXJuIHRoaXMudmlld0ZhY3RvcnkuY3JlYXRlKGNoaWxkQ29udGFpbmVyLCBjb250ZXh0LCB0aGlzLmZhY3RvcnlPcHRpb25zKTtcbiAgfVxufVxuXG52YXIgZGVmYXVsdEZhY3RvcnlPcHRpb25zID0ge1xuICBzeXN0ZW1Db250cm9sbGVkOmZhbHNlLFxuICBzdXBwcmVzc0JpbmQ6ZmFsc2Vcbn07XG5cbmV4cG9ydCBjbGFzcyBWaWV3RmFjdG9yeXtcbiAgY29uc3RydWN0b3IodGVtcGxhdGUsIGluc3RydWN0aW9ucywgcmVzb3VyY2VzKXtcbiAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnM7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSByZXNvdXJjZXM7XG4gIH1cblxuICBjcmVhdGUoY29udGFpbmVyLCBleGVjdXRpb25Db250ZXh0LCBvcHRpb25zPWRlZmF1bHRGYWN0b3J5T3B0aW9ucyl7XG4gICAgdmFyIGZyYWdtZW50ID0gdGhpcy50ZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSksXG4gICAgICAgIGluc3RydWN0YWJsZXMgPSBmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXUtdGFyZ2V0JyksXG4gICAgICAgIGluc3RydWN0aW9ucyA9IHRoaXMuaW5zdHJ1Y3Rpb25zLFxuICAgICAgICByZXNvdXJjZXMgPSB0aGlzLnJlc291cmNlcyxcbiAgICAgICAgYmVoYXZpb3JzID0gW10sXG4gICAgICAgIGJpbmRpbmdzID0gW10sXG4gICAgICAgIGNoaWxkcmVuID0gW10sXG4gICAgICAgIGNvbnRlbnRTZWxlY3RvcnMgPSBbXSxcbiAgICAgICAgY29udGFpbmVycyA9IHsgcm9vdDpjb250YWluZXIgfSxcbiAgICAgICAgcGFydFJlcGxhY2VtZW50cyA9IG9wdGlvbnMucGFydFJlcGxhY2VtZW50cyB8fCB0aGlzLnBhcnRSZXBsYWNlbWVudHMsXG4gICAgICAgIGksIGlpLCB2aWV3O1xuXG4gICAgZm9yKGkgPSAwLCBpaSA9IGluc3RydWN0YWJsZXMubGVuZ3RoOyBpIDwgaWk7ICsraSl7XG4gICAgICBhcHBseUluc3RydWN0aW9ucyhjb250YWluZXJzLCBleGVjdXRpb25Db250ZXh0LCBpbnN0cnVjdGFibGVzW2ldLFxuICAgICAgICBpbnN0cnVjdGlvbnNbaV0sIGJlaGF2aW9ycywgYmluZGluZ3MsIGNoaWxkcmVuLCBjb250ZW50U2VsZWN0b3JzLCBwYXJ0UmVwbGFjZW1lbnRzLCByZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIHZpZXcgPSBuZXcgVmlldyhmcmFnbWVudCwgYmVoYXZpb3JzLCBiaW5kaW5ncywgY2hpbGRyZW4sIG9wdGlvbnMuc3lzdGVtQ29udHJvbGxlZCwgY29udGVudFNlbGVjdG9ycyk7XG4gICAgdmlldy5jcmVhdGVkKGV4ZWN1dGlvbkNvbnRleHQpO1xuXG4gICAgaWYoIW9wdGlvbnMuc3VwcHJlc3NCaW5kKXtcbiAgICAgIHZpZXcuYmluZChleGVjdXRpb25Db250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmlldztcbiAgfVxufVxuIl19